home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / eselect / libs / output.bash < prev    next >
Text File  |  2006-04-12  |  7KB  |  240 lines

  1. #!/bin/bash
  2.  
  3. # Copyright (c) 2005 Gentoo Foundation.
  4. # $Id: output.bash.in 247 2005-12-17 02:36:34Z ciaranm $
  5. # This file is part of the 'eselect' tools framework.
  6. #
  7. # eselect is free software; you can redistribute it and/or modify it under the
  8. # terms of the GNU General Public License as published by the Free Software
  9. # Foundation; either version 2 of the License, or (at your option) any later
  10. # version.
  11. #
  12. # eselect is distributed in the hope that it will be useful, but WITHOUT ANY
  13. # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  14. # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License along with
  17. # eselect; if not, write to the Free Software Foundation, Inc., 59 Temple
  18. # Place, Suite 330, Boston, MA  02111-1307  USA
  19.  
  20. # Colours
  21. COLOUR_LIST_HEADER="\033[1;32m"
  22. COLOUR_LIST_LEFT="\033[0;1m"
  23. COLOUR_LIST_RIGHT="\033[00m"
  24. COLOUR_ERROR="\033[1;31m"
  25. COLOUR_NORMAL="\033[00m"
  26. COLOUR_HI="\033[1;34m"
  27. COLOUR_WARN="\033[1;31m"
  28.  
  29. # set all colours to COLOURS_NORMAL
  30. nocolours() {
  31.     COLOUR_LIST_HEADER=""
  32.     COLOUR_LIST_LEFT=""
  33.     COLOUR_LIST_RIGHT=""
  34.     COLOUR_ERROR=""
  35.     COLOUR_NORMAL=""
  36.     COLOUR_HI=""
  37.     COLOUR_WARN=""
  38. }
  39.  
  40. # write_error_msg PUBLIC
  41. # write an error
  42. write_error_msg() {
  43.     echo -e "${COLOUR_ERROR}!!! Error: ${COLOUR_NORMAL}${*}" 1>&2
  44. }
  45.  
  46. # write_warning_msg PUBLIC
  47. # write a warning
  48. write_warning_msg() {
  49.     echo -e "${COLOUR_WARN}!!! Warning: ${COLOUR_NORMAL}${*}" 1>&2
  50. }
  51.  
  52. # write_list_start PUBLIC
  53. # Write a list heading. Args may include text highlighting. If -p is passed,
  54. # use 'plain' highlighting.
  55. write_list_start() {
  56.     local colour="${COLOUR_LIST_HEADER}"
  57.     if [[ ${1} == "-p" ]] ; then
  58.         colour=
  59.         shift
  60.     fi
  61.     echo -n -e "${colour}"
  62.     echo -n -e $(apply_text_highlights "${colour}" "$*")
  63.     echo -n -e "${COLOUR_NORMAL}"
  64.     echo
  65. }
  66.  
  67. # write_kv_list_entry PUBLIC
  68. # Write a key/value list entry with $1 on the left and $2 on the right.
  69. # Args may include text highlighting. If -p is passed, use 'plain'
  70. # highlighting rather than bold.
  71. write_kv_list_entry() {
  72.     local n text left="${COLOUR_LIST_LEFT}" right="${COLOUR_LIST_RIGHT}"
  73.     local key val lindent rindent ifs_save="${IFS}"
  74.  
  75.     IFS=$' \t\n'
  76.  
  77.     if [[ ${1} == "-p" ]] ; then
  78.         left=
  79.         right=
  80.         shift
  81.     fi
  82.  
  83.     lindent=${1%%[^[:space:]]*}
  84.     rindent=${2%%[^[:space:]]*}
  85.     key=${1##*([[:space:]])}
  86.     val=${2##*([[:space:]])}
  87.  
  88.     echo -n -e "  ${lindent}${left}"
  89.     echo -n -e $(apply_text_highlights "${left}" "${key}")
  90.     echo -n -e "${COLOUR_NORMAL} "
  91.  
  92.     text=${key//\%%%??%%%/}
  93.     n=$(( 25 - ${#text} ))
  94.  
  95.     # if ${n} is less than or equal to zero then we have a long ${key}
  96.     # that will mess up the formatting of ${val}, so end the line, indent
  97.     # and let ${val} go on the next line.
  98.     if [[ ${n} -le 0 ]] ; then
  99.         n=$(( ${#rindent} + 28 ))
  100.         echo -n -e "\n$(space ${n})${right}"
  101.     else
  102.         space ${n}
  103.         n=$(( ${n} + 2 + ${#text} ))
  104.         # ${val} will already be indented by ${lindent} so only use the
  105.         # difference of ${rindent} and ${lindent} as the right indent
  106.         if [[ ${#rindent} -eq ${#lindent} ]] ; then
  107.             n=$(( ${n} + ${#lindent} ))
  108.         else
  109.             space $(( ${#rindent} - ${#lindent} ))
  110.             n=$(( ${n} + ${#rindent} - ${#lindent} ))
  111.         fi
  112.         echo -n -e "${right}"
  113.     fi
  114.  
  115.     local cols=$(get_column_width) \
  116.         cwords="$(apply_text_highlights "${right}" "${val}")"
  117.  
  118.     text=${val//\%%%??%%%/}
  119.     # only loop if it doesn't fit on the same line
  120.     if [[ $(( ${n} + ${#text} )) -ge ${cols} ]] ; then
  121.         local i=0
  122.         rindent="${rindent}$(space 28)"
  123.         cwords=( ${cwords} )
  124.         for text in ${val} ; do
  125.             text=${text//\%%%??%%%/}
  126.             # put the word on the same line if it fits
  127.             if [[ $(( ${n} + ${#text} + 1 )) -lt ${cols} ]] ; then
  128.                 echo -n -e "${cwords[i]}"
  129.                 n=$(( ${n} + ${#text} ))
  130.                 # only append a space if we're not on the last word
  131.                 if [[ ${i} -ne ${#cwords} ]] ; then
  132.                     echo -n ' '
  133.                     n=$(( ${n} + 1 ))
  134.                 fi
  135.             # otherwise, start a new line and indent
  136.             else
  137.                 echo -n -e "\n${rindent}${cwords[i]}"
  138.                 n=$(( ${#rindent} + ${#text} ))
  139.                 # only append a space if we're not on the last word
  140.                 if [[ ${i} -ne ${#cwords} ]] ; then
  141.                     echo -n ' '
  142.                     n=$(( ${n} + 1 ))
  143.                 fi
  144.             fi
  145.             i=$(( ${i} + 1 ))
  146.         done
  147.     else
  148.         echo -n -e "${cwords}"
  149.     fi
  150.     echo -e "${COLOUR_NORMAL}"
  151.     IFS="${ifs_save}"
  152. }
  153.  
  154. # write_numbered_list_entry PUBLIC
  155. # Write out a numbered list entry with index $1 and text $2. Args may
  156. # include text highlighting. If -p is passed, use 'plain' highlighting.
  157. write_numbered_list_entry() {
  158.     local n left="${COLOUR_LIST_LEFT}" right="${COLOUR_LIST_RIGHT}"
  159.     if [[ ${1} == "-p" ]] ; then
  160.         left=""
  161.         right=""
  162.         shift
  163.     fi
  164.     echo -n -e "  ${left}"
  165.     echo -n -e "[$(apply_text_highlights "${left}" "$1")]"
  166.     echo -n -e "${COLOUR_NORMAL}"
  167.     space $(( 4 - ${#1} ))
  168.     echo -n -e "${right}"
  169.     echo -n -e $(apply_text_highlights "${right}" "$2")
  170.     echo -n -e "${COLOUR_NORMAL}"
  171.     echo
  172. }
  173.  
  174. # write_numbered_list PUBLIC
  175. # Write out a numbered list. Args may include text highlighting.
  176. write_numbered_list() {
  177.     local n=1 p=
  178.     if [[ ${1} == "-p" ]] ; then
  179.         p="-p"
  180.         shift
  181.     fi
  182.  
  183.     while [[ ${#@} -gt 0 ]] ; do
  184.         item=${1}
  185.         shift
  186.         if [[ ${item##*\\} == "" ]] ; then
  187.             item="${item%\\} ${1}"
  188.             shift
  189.         fi
  190.         write_numbered_list_entry ${p} "${n}" "${item}"
  191.         n=$(( ${n} + 1 ))
  192.     done
  193. }
  194.  
  195. # get_column_width INTERNAL
  196. # Get current column width
  197. get_column_width() {
  198.     if [[ -z "${COLS}" ]] ; then
  199.         COLS=( $(stty size 2>/dev/null) )
  200.         is_number "${COLS[1]}" && COLS=${COLS[1]} || COLS=79
  201.     fi
  202.  
  203.     echo -n ${COLS}
  204. }
  205.  
  206. # apply_text_highlights INTERNAL
  207. # Apply text highlights. First arg is the 'restore' colour, second arg
  208. # is the text.
  209. apply_text_highlights() {
  210.     local restore=${1} text=${2}
  211.     text="${text//?%%HI%%%/${COLOUR_HI}}"
  212.     text="${text//?%%WA%%%/${COLOUR_WARN}}"
  213.     text="${text//?%%RE%%%/${restore}}"
  214.     echo -n "${text}"
  215. }
  216.  
  217. # highlight PUBLIC
  218. # Highlight all arguments. Text highlighting function.
  219. highlight() {
  220.     echo -n -e "%%%HI%%%${*}%%%RE%%%"
  221. }
  222.  
  223. # highlight_warning PUBLIC
  224. # Highlight all arguments as a warning (red). Text highlighting function.
  225. highlight_warning() {
  226.     echo -n -e "%%%WA%%%${*}%%%RE%%%"
  227. }
  228.  
  229. # space PUBLIC
  230. # Write $1 numbers of spaces
  231. space() {
  232.     local ret=""
  233.     for (( n = 1 ; n <= ${1} ; ++n )) ; do
  234.         ret="${ret} "
  235.     done
  236.     echo -n "${ret}"
  237. }
  238.  
  239. # vim: set sw=4 et sts=4 tw=80 :
  240.